﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using ActivitiesControl.GUI.Silverlight.RemoteServices;
using ActivitiesControl.GUI.Silverlight.Utils;
using System.Reflection;
using ActivitiesControl.GUI.Silverlight.Services;

namespace ActivitiesControl.GUI.Silverlight.Views
{
	public partial class LoginModal
		: ChildWindow
	{
		public LoginModal()
		{
			InitializeComponent();
			Loaded += new RoutedEventHandler(LoginModal_Loaded);
		}

		void LoginModal_Loaded(object sender, RoutedEventArgs e)
		{
			UsernameTextBox.Focus();
		}

		private ActivitiesControlServicesClient service;
		
		private void LoginButton_Click(object sender, RoutedEventArgs e)
		{
			if (service == null)
				service = ServiceLocator.Instance.Service;

			service.ValidateUserCompleted -= new EventHandler<ValidateUserCompletedEventArgs>(service_ValidateUserCompleted);
			service.ValidateUserCompleted += new EventHandler<ValidateUserCompletedEventArgs>(service_ValidateUserCompleted);
			
			service.ValidateUserAsync(UsernameTextBox.Text, PasswordTextBox.Password);

			Message.Show("Autenticando...");
			MessageTextBlock.Text = "Autenticando...";
		}

		void service_ValidateUserCompleted(object sender, ValidateUserCompletedEventArgs e)
		{
			try
			{
				if (e.Result)
				{
					Message.Show("Autenticado. Você será redirecionado em poucos instantes.", e);
					MessageTextBlock.Text = "Autenticado!";
					LoggedUser.Instance.User = e.loggedUser;
					Main.Instance.SetContent(new Activities());
					Close();
				}
				else
				{
					LoggedUser.Instance.User = null;
					MessageTextBlock.Text = "A autenticação falhou. Tente novamente, por favor.";
					Message.Show("A autenticação falhou. Tente novamente, por favor.", e);
				}
			}
			catch (TargetInvocationException ex)
			{
				LoggedUser.Instance.User = null;
				MessageTextBlock.Text = string.Format("A autenticação falhou. Tente novamente, por favor. ({0})", ex.Message);
				Message.Show(string.Format("A autenticação falhou. Tente novamente, por favor. ({0})", ex.Message));
			}
		}

		private void TextBox_KeyDown(object sender, KeyEventArgs e)
		{
			if (e.Key == Key.Enter)
				LoginButton_Click(null, null);
		}
	}
}

